package com.southwind.springboottest.studykotlin.s2

// TODO 27.Kotlin语言的匿名函数的类型推断

fun main() {
    // 方法名 ： 必须指定 参数类型 和 返回类型
    // 方法名 =  类型推断返回类型
    //匿名函数 == lambda表达式，类型推断为String
    val method1 = {v1:Double,v2:Float,v3:Int ->
        "v1:$v1,v2:$v2,v3:$v3" //匿名函数返回结果 == lambda成果
    }
    println(method1(5345.45435,34535.4f,99))

    //匿名函数 == lambda表达式，类型推断为Int
    val method2 = {v1:Double,v2:Float,v3:Int ->
        1 //匿名函数返回结果 == lambda成果
    }

    println(method2(5345.45435,34535.4f,99))

    //匿名函数 == lambda表达式，类型推断为float
    val method3 = {v1:Double,v2:Float,v3:Int ->
        5345345.4f //匿名函数返回结果 == lambda成果
    }
    println(method3(5345.45435,34535.4f,99))
    //解释如下
    fun processNumbers(action: (Int) -> Int) {
        // 在这里使用 Lambda 表达式
    }

    // 调用 processNumbers 时传递 Lambda 表达式
    processNumbers { number -> number * 2 } // 推断为 (Int) -> Int 类型
    //Int是入参，Int是返回类型
    val double1: (Int) -> Int = { number -> number * 2 } // 推断为 (Int) -> Int 类型
    val double2: (Int) -> Int = { it * 2 } // 省略返回类型声明，编译器会推断为 (Int) -> Int 类型
    //升级写法可以如下
    val double = {it:Int -> it * 2 }
    println(double(2))
}